package com.sxj.corejava.code08_常用类.内部类;

import com.sxj.corejava.code08_常用类.内部类.SomeOuter.SomeInner;

/**
 * @author 石小俊
 * @date 2025年02月19日
 */
public class Test03_静态内部类 {

    public static void main(String[] args) {
        // 在非外部类中实例化内部类,有两种方式
        // 方式一:可以将外部类.内部类整体作为一个类名
        SomeOuter.SomeInner inner = new SomeOuter.SomeInner();
        System.out.println(inner.getName());
        // 方式二:手动导包,在导包时,一般只会导入到外部类这一层
        // 我们可以手动将内部类进行导包
        SomeInner inner2 = new SomeInner();
        System.out.println(inner2.getName());
//        inner.show();

        SomeOuter outer = new SomeOuter();
        outer.show();

    }

}

class SomeOuter {
    private static String name = "admin";
    private int age = 18;
    private static String phone = "13812345678";

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public void show() {
        System.out.println("*****************外部类方法*****************");
        // 在外部类中实例化内部类,直接实例化
        SomeInner inner = new SomeInner();
        // 在外部类方法中访问内部类,可以通过内部类对象正常访问
        System.out.println(inner.name);
        System.out.println(inner.gender);
        inner.show();
    }

    static class SomeInner {
        private String name = "alice";
        private String gender = "女";

        public void show() {
            System.out.println("*****************内部类方法*****************");
            System.out.println("内部类的name:" + name);
            // 在静态内部类中访问外部类成员时,只能访问静态成员
//            System.out.println(age);
            System.out.println(phone);
            // 访问同名成员时,默认访问内部类自己的
            // 如果想要访问外部类的,可以通过类名.成员名
            System.out.println("外部类的name:" + SomeOuter.name);
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public String getGender() {
            return gender;
        }

        public void setGender(String gender) {
            this.gender = gender;
        }
    }
}
